package util

import (
	"encoding/json"
	"hc_server/pkg/setting"
	"math/rand"
	"regexp"
	"strconv"
	"time"
)

func Setup() {
	jwtSecret = []byte(setting.GetConfig().App.JwtSecret)
}

// GenerateRandomNumber 获取随机数
func GenerateRandomNumber(n int) int {
	const letters = "0123456789" // 包含所有数字字符的字符串
	b := make([]byte, n)         // 创建一个长度为n的字节切片
	for i := range b {
		b[i] = letters[rand.Intn(len(letters))] // 随机选择一个数字字符填充到切片中
	}
	num, _ := strconv.Atoi(string(b)) // 将字节切片转换为整数
	return num
}

// GenerateRandomStr 生成指定长度的随机字符串
func GenerateRandomStr(n int) string {
	const letters = "0123456789abcdefghiklmnopqrstuvwxyz"
	rand.Seed(time.Now().UnixNano()) // 设置随机种子

	b := make([]byte, n)
	for i := range b {
		b[i] = letters[rand.Intn(len(letters))]
	}
	return string(b)
}

// StructToMap 结构体转map
func StructToMap(obj interface{}) (map[string]interface{}, error) {
	data, err := json.Marshal(obj)
	if err != nil {
		return nil, err
	}
	var result = make(map[string]interface{})
	err = json.Unmarshal(data, &result)
	if err != nil {
		return nil, err
	}
	return result, nil
}

// ContainsSpecialChars 判断字符串是否包含特殊字符
func ContainsSpecialChars(input string) bool {
	// 定义正则表达式来匹配特殊字符
	pattern := `[^\p{Han}\w]`
	re := regexp.MustCompile(pattern)
	return re.MatchString(input)
}

// DesensitizePhoneNumber 手机号脱敏函数
func DesensitizePhoneNumber(phoneNumber string) string {
	if len(phoneNumber) >= 7 {
		prefix := phoneNumber[:3]
		suffix := phoneNumber[len(phoneNumber)-4:]
		return prefix + "****" + suffix
	}
	return phoneNumber
}
